The demands on servers to provide adequate services to client devices are continuing to increase. In addition to ever increasing processing and bandwidth requirements, the number and variety of the services is also increasing. To meet these and other demands, it can be desirable to have a system that implements a number of servers, which can each provide similar functionality. These servers can be virtually identical to one another and operate in a parallel manner. Thus, to a user of the service, the servers appear as a single entity.
Some mechanisms must be employed to split duties between the different servers. For example, a device can be placed in front of the servers to distribute connections/services between the servers. Thus, incoming requests/connections are first received by the device. The device then distributes the workload between the servers. The present disclosure recognizes that this device may need to track the connections established because some services work only if all the components of a transaction are directed to the same server. This can create a bottleneck that frustrates linear scalability. Another issue recognized is that this kind of device requires specialization for the particular network service.
Another mechanism for implementing a scalable service is to have the (computer) client handle the load balancing. For this kind of load balancing, the client retrieves a list of servers available, and then chooses one randomly. The typical approach for implementing this is to use the Domain Name System (DNS) and multiple “A records.” A records contain the mapping between a domain name and an IP address. As it is possible to associate multiple IP addresses to one A record, a service administrator can put in the A record the list of all servers available, and the client can choose one of them.
This DNS approach, however, requires limitations in the size of the data being returned as limited by design. For example, a standard DNS response carrying the IP addresses is limited to a size of 512 bytes. It might be possible to use another mechanism that allows for a greater size, such as TCP; however, TCP adds a lot of pressure on the DNS server and is generally not used for requests from a client. There is also a DNS extension (Request-For-Comments (RFC) 2671) to increase the size of a DNS packet to 1280 bytes, but this extension also has a limited number of IP addresses that can be put in a packet.